﻿using System;
using System.Windows.Forms;

namespace AwesomeChromeFormUI.Utils
{
    public class MainViewUtil
    {
        /// <summary>
        /// 获取当前活动窗体
        /// </summary>
        /// <returns></returns>
        public static Form GetCurrentForm()
        {
            Form currentForm = null;
            // 使用 Control.Invoke 将代码调用到 UI 线程上
            // 这里假设至少有一个打开的窗体 BaseForm
            Control control = Application.OpenForms[0];
            control.Invoke((MethodInvoker)delegate
            {
                foreach (Form form in Application.OpenForms)
                {
                    if (form.InvokeRequired)
                    {
                        // 如果窗体的 InvokeRequired 属性为 true，则使用委托来获取焦点状态
                        bool focused = (bool)form.Invoke(new Func<bool>(() => form.ContainsFocus));
                        if (focused)
                        {
                            currentForm = form;
                            break;
                        }
                    }
                    else
                    {
                        // 否则直接访问窗体的 ContainsFocus 属性
                        if (form.ContainsFocus)
                        {
                            currentForm = form;
                            break;
                        }
                    }
                }
            });

            return currentForm;
        }
    }
}
